package demo.pattern.proxy.dynamic.cglib;

import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

// 编写切面类，拦截方法调用
public class OrderMethodInterceptor implements MethodInterceptor {

	// 参数分别为：1、代理对象；2、委托类方法；3、方法参数；4、代理方法的MethodProxy对象。
	@Override
	public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
		beforePay();
		// 注意，这里调用的是MethodProxy对象的invokeSuper方法，不是Method对象的invoke方法
		Object result = methodProxy.invokeSuper(proxy, args);
		afterPay();
		return result;
	}

	// 织入逻辑
	private void afterPay() {
		System.out.println("支付之后");
	}

	private void beforePay() {
		System.out.println("支付之前");
	}
}
